#ifndef NOSEPIECEINTERFACE_H
#define NOSEPIECEINTERFACE_H
#include <QtCore/QObject>
#include <QSettings>
#include "../Nosepiece_global.h"

namespace Qly {


class OMControlInterface
{
    public:
    NosepieceInterface * defaultNosepiece();
    NosepieceInterface * nosepiece(int index);
    int nosepieceCount();

    
}    


/**
 * @brief The NosepieceInterface class 所有物镜转盘的公共基类。
 *        这个类里面规定了 物镜转盘的公共接口。
 */
class NOSEPIECE_EXPORT NosepieceInterface : public QObject
{
    Q_OBJECT
public:
    NosepieceInterface(QObject * parent) : QObject(parent) {}
    virtual ~NosepieceInterface() {}
    virtual void loadSettings(QSettings &settings) = 0;
    virtual void writeSettings(QSettings &settings) = 0;
public slots:
    /**
     * @brief setLens 设置物镜转盘转到第 n 个物镜位置
     * @param n n 为 从 0 到 N 数字分别代表第 1 个到 第 N + 1 个物镜
     */
    virtual void setLens(int n) = 0;
    /**
     * @brief setLens 设置物镜转盘转到第 n 个物镜位置
     * @param oldLens 当前物镜的位置，从 0 开始。 如果不知道原来的物镜是哪颗，可以 oldLens = -1
     * @param newLens 新物镜，从 0 开始
     */
    virtual void setLens(int oldLens, int newLens) = 0;
    /**
     * @brief forward 切换到下一个物镜
     */
    virtual void forward() = 0;
    /**
     * @brief reverse 切换到上一个物镜
     */
    virtual void reverse() = 0;

    virtual void showSetupDialog() = 0;
signals:
    /**
     * @brief lensChanged 物镜改变时发出这个信号
     * @param oldLens 原来的物镜， 从 0 开始，如果不确定原来的物镜是哪颗，则 oleLens = -1
     * @param newLens 新的物镜， 从 0 开始
     */
    void lensChanged(int oldLens, int newLens);

protected:
    int m_lensIndex = -1; //记录当前物镜转盘的位置
};
}


#endif // NOSEPIECEINTERFACE_H
